<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Chaining Promise</title>
</head>
<body>
    <script>
        //JS 代码如何运行 -> JS引擎中运行 单线程 渲染引擎 (页面不能卡顿)
        //Event Loop 事件循环 同步代码 异步代码
        //执行栈 压入script 第一个macro task 
        //宏任务macro task，微任务 micro task 
        //macro task : setTimeout  setInterval  script  setImmediate  I/O操作  UI渲染
        //micro task : Promise.then  process.nextTick  Object.observe MutationObserver
        //事件循环过程 event loop 
        //- 初始状态 调用栈为空 栈底是全局作用域 micro 队列为空 macro 队列只有一个script脚本（整体代码）
        //- 全局上下文 被推入调用栈 。 同步执行代码
        //- 遇到异步代码 被推入微任务队列
        //- 同步代码执行完毕，检查微任务队列，如果有任务，则依次执行
        //- 同步代码执行完毕，检查宏任务队列，如果有任务，则依次执行
        //- 重复上述步骤，直到微任务队列和宏任务队列都为空
        //- 宏任务队列为空，检查微任务队列，如果有任务，则依次执行
        //  执行中，如果产生了macro 或者 micro 就加入各自的任务队列
        //- script 脚本移出 macro 队列
        //- event loop 直到 俩个队列都清空
        //- 执行渲染操作，更新界面
    </script>
</body>
</html>